Software applications, such as virtual machines (VMs), may be executed by a group or “cluster” of host computing devices. A management device may coordinate execution of the software applications by hosts, ensuring, for example, that at least one instance of a particular software application is available whenever possible, or that the computing load associated with execution of software applications is distributed across hosts in the cluster.
A management device may control which host(s) executes, and/or stores data related to, a software application, also known as the “placement” of the software application. Further, software application placement may be governed by placement rules that specify a desired placement of a software application with respect to another software application. For example, an affinity rule specifies that a software application should be co-located with one or more other software applications, whereas an anti-affinity rule specifies that a software application should be separated from one or more other software applications.
Placement rules may be enforced against specific computing resources, such as hosts or storage devices. For example, an anti-affinity rule may be enforced by preventing two VMs from being placed on the same host. However, the goal of a placement rule—that two instances of the same software application not be associated with the same point of failure, for example—may not be consistently achieved by simply placing the software applications on different resources. For example, different resources may be correlated in terms of failures and/or performance, such that a failure or performance degradation associated with one resource is likely to be concurrent with a similar failure or performance degradation of another resource.
Further, in some scenarios, a management device may have limited access to computing resources, such that enforcement of placement rules by the management device alone may be infeasible. For example, computing resources such as distributed computing resources and data storage resources, may be managed by a computing resource container that allocates computing resource utilization among a plurality of hardware devices and prevents direct access to such hardware devices by the management device. In such scenarios, the management device may attempt to satisfy an affinity rule by placing affined software applications in the same computing resource container, for example. Similarly, the management device may attempt to satisfy an anti-affinity rule by ensuring that anti-affined software applications are never placed in the same computing resource container. Such approaches may result in undesired consequences, such as affined software applications being placed on different hardware devices by the computing resource container, or a portion of anti-affined software applications not being placed on any computing resource when a limited quantity of computing resource containers is available.